#pragma once

#include "ogl/gut/types.h"

#include "ogl/model/Mesh.h"
#include "ogl/model/Scene.h"

#include "imgui/imgui.h"

namespace ImGui
{
    namespace Model
    {
        struct Editor
        {

            Editor();

            void PassScene(const Ogl::Model::Scene *scene);

            void TreeNode(const Ogl::Model::Node *node);

            void ShowMesh(const Ogl::Model::Mesh *mesh);

            void ShowAnimation(const Ogl::Model::Animation *anim);

            void ShowChannel(const Ogl::Model::Channel *channel);

            void ShowCamera(const Ogl::Model::Camera *camera);

            void ShowLight(const Ogl::Model::Light *light);

            void ShowScene(const Ogl::Model::Scene *scene);

            void ShowMaterial(const Ogl::Model::Material *mat);

            void ShowTextures(const Ogl::Model::Material *mat, const std::string &info);

            void ShowTexture(const Ogl::Gut::Texture2D *tex, ImVec2 sz = ImVec2(50, 50));

            void ShowAABB(const Ogl::Model::AABB &aabb);

            void Show(const std::string &label, const float &v);

            void Show(const std::string &label, const glm::vec3 &v);

            void Show(const std::string &label, const glm::vec2 &v);

            void Show(const std::string &label, const glm::vec4 &v);

            void Show(const std::string &label, const std::string &name);

            void ShowFramebuffer(const Ogl::Gut::Texture2D *tex, ImVec2 sz,  ImVec2 uv0 = {0, 1}, ImVec2 uv1 = {1, 0});
        };
    };
};